10 REM ********************** 12 REM * * 14 REM * CRIBBAGE SOLITAIRE * 15 REM * (COMMODORE 64) * 16 REM * BY * 17 REM * CHRIS CONSTANTINOU * 18 REM * FEBRUARY 1984 * 19 REM * * 20 REM ********************** 70 LH=999:LC=999 80 POKE53280,11:POKE53281,15 90 DEF FNB(X)=INT(X*10+.5)/10 95 POKE54296,15:POKE54277,68:POKE54273,63:POKE54272,75 110 DIMA(54),DE(54),A$(11),RR$(13),V(13),R(13) 120 FORI=1TO13:READRR$(I):NEXTI 130 FORI=1TO13:READV(I):NEXTI 135 FORI=1TO13:READR(I):NEXTI 140 DATA A,2,3,4,5,6,7,8,9,10,J,Q,K 150 DATA 1,2,3,4,5,6,7,8,9,10,10,10,10 155 DATA 1,2,3,4,5,6,7,8,9,10,11,12,13 160 PRINT"[147]  [146]" 161 PRINT"  CRIBBAGE SOLITAIRE [146]" 162 PRINT"  [146]" 164 PRINT" DO YOU WISH TO SEE" 165 PRINTTAB(16)"PLAYING" 167 PRINTTAB(10)"[207][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][208]" 168 PRINTTAB(10)"[165]IF YES,ENTER Y OR [167]" 170 PRINTTAB(10)"[165]HIT RETURN[146] TO PLAY[167]" 171 PRINTTAB(10)"[204][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][186]" 173 INPUT"[145][145][145][145][145][145][145] INSTRUCTIONS N[157][157][157]";A$ 175 IFLEFT$(A$,1)="Y"THENGOSUB2600 178 PRINT"[147]  [146]" 179 PRINT"  CRIBBAGE SOLITAIRE [146]" 180 PRINT"  [146]" 181 PRINT" SHUFFLING THE DECK OF CARDS" 182 PRINTTAB(13)"IS IN PROCESS" 185 FORI=1TO52:A(I)=I:NEXTI:I=1:CC=0:S=1:GT=0:HL=0:CL=0 190 FORW=1TO6:REM DEAL RANDOM CARDS TO CRIB 200 CD=0:FORI=ITOI+1 220 GOSUB1005:REM DEAL RANDOM CARDS TO CRIB 230 IFDE(I)>39THEN270 240 IFDE(I)>26THEN280 250 IFDE(I)>13THEN290 260 R=DE(I):SC$(CD)="[211]":GOTO295 270 R=DE(I)-39:SC$(CD)="[193]":GOTO295 280 R=DE(I)-26:SC$(CD)="[216]":GOTO295 290 R=DE(I)-13:SC$(CD)="[218]" 295 RC$(CD)=RR$(R):RC(CD)=R(R):VC(CD)=V(R):NEXTI 395 REM *** DEAL HAND *** 400 CD=0:FORI=ITOI+5 410 GOSUB1005:REM ** DEAL RANDOM CARDS ** 420 IFDE(I)>39THEN460 430 IFDE(I)>26THEN470 440 IFDE(I)>13THEN480 450 R=DE(I):S$(CD)="[211]":GOTO485 460 R=DE(I)-39:S$(CD)="[193]":GOTO485 470 R=DE(I)-26:S$(CD)="[216]":GOTO485 480 R=DE(I)-13:S$(CD)="[218]" 485 R$(CD)=RR$(R):RH(CD)=R(R):VH(CD)=V(R) 490 IFI=53THEN494 492 GOTO500 494 R$(6)=TR$(1):S$(6)=TS$(1):RH(6)=TR(1):VH(6)=TV(1):I=54 500 NEXTI 600 PRINT"[147]":CC=0:D=6:GOSUB1045:REM ** SORT HAND OF CARDS ** 610 FORL=1TO6 620 R$=R$(L):S$=S$(L):R=RH(L) 630 C$="":IFR$="10"THENC$="[157]" 640 GOSUB1215:REM ** BUILD GRAPHICS ZONE ** 650 ONRGOSUB1300,1350,1400,1450,1500,1550,1600,1650,1700,1750,1800,1850,1900 654 REM ** PRINT CARD ** 660 PRINT"";:IFL<4THENTB=CC*8+4:PRINTTAB(TB);L 661 IFS$="[211]"ORS$="[218]"THENPRINT"";:GOTO663 662 PRINT"[144]"; 663 IFL<4THEN666 664 IFL=4THENCC=0:PRINT"" 665 TB=CC*8+10 666 POKE54276,129:FORJ=1TO11:PRINTTAB(TB);A$(J):NEXTJ:PRINT"";:POKE54276,128 667 IFL>3THENPRINTTAB(TB);L 668 CC=CC+1:PRINT"[145][145][145][145][145][145][145][145][145][145][145][145][145]":NEXTL:PRINT""TAB(30)"HAND"W"[157][157][157]#[146]" 670 PRINT""; 671 PRINTTAB(11)"SELECT 2 CARDS FOR" 672 PRINTTAB(11)"CRIB." 673 PRINTTAB(11)"GAME POINTS:[151]";GT 674 PRINTTAB(18)"[145][145][145]1ST: [164] [157][157][157][157][157][157][157][157][157][157]"; 675 POKE198,0:WAIT198,1:GETC1$:IFC1$="0"THEN63000 676 IFVAL(C1$)<1ORVAL(C1$)>6THEN675 677 : 678 PRINTC1$" 2ND: [164][157]";:C1=VAL(C1$) 679 GETC2$:IFVAL(C2$)<1ORVAL(C2$)>6ORC2$=C1$THEN679 680 PRINTC2$:C2=VAL(C2$) 683 PRINT" [218] HIT [146] TO SCORE HAND [218]"; 685 GETA$:IFA$=""THEN685 686 IFA$=CHR$(20)ORA$=CHR$(157)THEN670 687 IFA$<>CHR$(13)THEN685 690 CD=3:K=1:FORJ=1TO6 695 IFJ=C1ORJ=C2THENRC$(CD)=R$(J):SC$(CD)=S$(J):RC(CD)=RH(J):GOTO700 698 GOTO705 700 VC(CD)=VH(J):CD=CD+1:GOTO708 705 RS$(K)=R$(J):SS$(K)=S$(J):RS(K)=RH(J):VS(K)=VH(J):K=K+1 708 NEXTJ 710 FORK=1TO4:R$(K)=RS$(K):S$(K)=SS$(K):RH(K)=RS(K):VH(K)=VS(K):NEXTK 720 IFW=6THENTR$=TR$(2):TS$=TS$(2):TR=TR(2):TV=TV(2):GOTO760 722 GOSUB1005:REM ** DEAL TURN-UP ** 725 IFDE(I)>39THEN745 730 IFDE(I)>26THEN750 735 IFDE(I)>13THEN755 740 R=DE(I):TS$="[211]":GOTO757 745 R=DE(I)-39:TS$="[193]":GOTO757 750 R=DE(I)-26:TS$="[216]":GOTO757 755 R=DE(I)-13:TS$="[218]" 757 TR$=RR$(R):TR=R(R):TV=V(R) 760 I=I+1:R$(5)=TR$:S$(5)=TS$:RH(5)=TR:VH(5)=TV 770 D=5:GOSUB1045:REM ** SORT HAND OF 5 ** 775 SW=0:GOSUB2000:REM ** SCORE HAND ** 780 GOSUB2310:REM ** SCORE FLUSH IN HAND ** 782 C$="[157]":PRINT"[147]"TAB(15)" HAND #";W;C$;" [146]" 785 CC=0:FORL=1TO5:R$=R$(L):S$=S$(L):R=RH(L) 788 C$="":IFR$="10"THENC$="[157]" 790 GOSUB1215:REM ** GRAPHICS ** 795 ONRGOSUB1300,1350,1400,1450,1500,1550,1600,1650,1700,1750,1800,1850,1900 796 IFS$="[211]"ORS$="[218]"THENPRINT"";:GOTO798 797 PRINT"[144]"; 798 TB=CC*6+3:POKE54276,129:FORJ=1TO11:PRINTTAB(TB);A$(J):NEXTJ:POKE54276,128 800 CC=CC+1:PRINT"[145][145][145][145][145][145][145][145][145][145][145][145]":NEXTL:PRINT""; 802 PRINT"" 804 PRINTTAB(10)"TURN-UP IS: ";:TC$="[144]":IFTS$="[218]"ORTS$="[211]"THENTC$="" 805 PRINTTC$+TR$+TS$+"" 806 PRINTTAB(10)"POINTS IN HAND: ";TP 808 PRINTTAB(10)"GAME POINTS: [151]";GT 815 PRINTTAB(4)"[218] HIT [146] TO SCORE CRIB [218]"; 817 GETA$:IFA$=""THEN817 820 IFA$<>CHR$(13)THEN817 825 REM ** MOVE CRIB VAR.TO HAND ** 830 FORX=1TO4:R$(X)=RC$(X):S$(X)=SC$(X):RH(X)=RC(X):VH(X)=VC(X):NEXTX 832 R$(5)=TR$:S$(5)=TS$:RH(5)=TR:VH(5)=TV 835 D=5:GOSUB1045:REM ** SORT CRIB OF 5 ** 836 SW=1:GOSUB2000:REM ** SCORE CRIB ** 837 GOSUB2400:REM ** SCORE FLUSH ** 838 C$="[157]":PRINT"[147]"TAB(15)" CRIB #";W;C$;" [146]" 840 CC=0:TB=0:FORL=1TO5 845 R$=R$(L):S$=S$(L):R=RH(L):C$="":IFR$="10"THENC$="[157]" 850 GOSUB1215:REM ** GRAPHICS ** 852 ONRGOSUB1300,1350,1400,1450,1500,1550,1600,1650,1700,1750,1800,1850,1900 853 IFS$="[211]"ORS$="[218]"THENPRINT"";:GOTO856 854 PRINT"[144]"; 856 TB=CC*6+3:POKE54276,129:FORJ=1TO11:PRINTTAB(TB);A$(J):NEXTJ:POKE54276,128 858 CC=CC+1:PRINT"[145][145][145][145][145][145][145][145][145][145][145][145]":NEXTL:PRINT""; 861 PRINTTAB(10)"TURN-UP IS: ";TC$+TR$+TS$+"" 862 PRINTTAB(10)"POINTS IN CRIB: ";TP 863 PRINTTAB(10)"GAME POINTS: [151]";GT 864 PRINT" [218] HIT [146] TO DEAL ANOTHER HAND [218]"; 865 GETA$:IFA$=""THEN865 867 IFA$<>CHR$(13)THEN865 870 REM ** STORE TURN-UP IN HOLD ** 880 TR$(S)=TR$:TS$(S)=TS$:TR(S)=TR:TV(S)=TV:S=S+1 890 NEXTW 900 REM *** LAST HAND *** 905 FORX=2TO5:R$(X-1)=TR$(X):S$(X-1)=TS$(X):RH(X-1)=TR(X):VH(X-1)=TV(X):NEXTX 910 R$(5)="":S$(5)="":RH(5)=15:VH(5)=15 920 D=4:GOSUB1045:REM ** SORT LAST HAND ** 930 PRINT"[147]" 935 GOSUB2000:REM ** SCORE HAND OF 4 ** 937 GOSUB2310:REM ** SCORE FLUSH ** 939 PRINT"[147]"TAB(14)" LAST HAND [146]" 940 CC=0:FORL=1TO4 945 R$=R$(L):S$=S$(L):R=RH(L):C$="":IFR$="10"THENC$="[157]" 950 GOSUB1215:REM ** GRAPHICS ** 955 ONRGOSUB1300,1350,1400,1450,1500,1550,1600,1650,1700,1750,1800,1850,1900 957 IFS$="[211]"ORS$="[218]"THENPRINT"";:GOTO960 958 PRINT"[144]"; 960 TB=CC*6+6:POKE54276,129:FORJ=1TO11:PRINTTAB(TB);A$(J):NEXTJ:POKE54276,128 962 CC=CC+1:PRINT"[145][145][145][145][145][145][145][145][145][145][145][145]":NEXTL 965 PRINTTAB(13)"LAST HAND:";TP 966 PRINTTAB(11)"GAME POINTS:[151]";GT 968 PRINT" [218] HIT [146] TO VIEW GAME TOTALS [218]"; 970 GETA$:IFA$=""THEN970 971 IFA$<>CHR$(13)THEN970 972 IFGT>GHTHENGH=GT 973 GC=GC+1:GA=GA+GT 980 PRINT"[147][154]"TAB(7)"[213][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][201]" 981 PRINTTAB(7)"[194] CRIBBAGE SOLITAIRE[154] [221]" 982 PRINTTAB(7)"[194] STATISTICAL AVERAGES[154] [221]" 984 PRINTTAB(7)"[202][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][203] " 985 PRINTTAB(9)"GAME POINTS : ";GT 986 PRINTTAB(9)"LAST AVG/HAND: ";FNB(HL/6):IFFNB(HL/6)>HHTHENHH=FNB(HL/6) 987 PRINTTAB(9)"LAST AVG/CRIB: ";FNB(CL/6):IFFNB(CL/6)>HCTHENHC=FNB(CL/6) 988 PRINTTAB(9)"AVERAGE/GAME : ";FNB(GA/GC) 989 PRINTTAB(9)"AVERAGE/HAND : ";FNB(HA/6/GC) 990 PRINTTAB(9)"AVERAGE/CRIB : ";FNB(CA/6/GC) 991 PRINTTAB(9)"HIGH AVG/HAND: ";HH:IFFNB(HL/6)"Y"ANDA$<>"N"THEN997 998 IFA$="Y"THENGOSUB2800:GOTO63000 999 GOTO63000 1000 GOTO160 1005 V=INT((53-I)*RND(0)+1) 1010 DE(I)=A(V):CD=CD+1 1020 FORJ=VTO(52-I):A(J)=A(J+1):NEXTJ 1030 RETURN 1040 REM *** SORT SUBROUTINE *** 1045 FORM=1TOD-1 1050 FORN=1TOD-1 1055 IFRH(N)RH(K+1)THENSQ(X)=RH(K+1):X=X+1 2155 NEXTK 2160 FORX=1TO5:HQ(X)=15:NEXTX:K=1:X=1 2165 IFSQ(K)=20THEN2268 2170 IFSQ(K)=SQ(K+1)+1THEN2180 2175 K=K+1:GOTO2165 2180 IFSQ(K)=SQ(K+2)+2THENP3=P3+3:FORX=1TO3:HQ(X)=SQ(K+X-1):NEXTX:GOTO2190 2185 K=K+1:GOTO2165 2190 IFSQ(K)=SQ(K+3)+3THENP3=P3+1:HQ(X)=SQ(K+3):GOTO2200 2195 GOTO2205 2200 IFSQ(K)=SQ(K+4)+4THENP3=P3+1 2205 X=1:Z=0:PR=0 2210 FORY=1TO4 2215 FORK=XTO5 2220 IFHQ(X)=RH(K)THENZ=Z+1 2225 NEXTK 2230 IFZ=2THENPR=PR+1 2235 IFZ=3THENPR=PR+3 2240 X=X+1:Z=0 2245 NEXTY 2250 IFPR=1THENP3=P3*2 2255 IFPR=2THENP3=P3*4 2260 IFPR=3THENP3=P3*3 2265 REM * NIBS SCORING * 2268 IFW=7THEN2303 2270 FORX=1TOD 2275 IFRH(X)=11THEN2285 2280 GOTO2290 2285 IFS$(X)=TS$THENP4=P4+1 2290 NEXTX 2295 REM * JACK SCORING * 2296 IFTR=11THENP4=0 2297 IFSW=1THEN2303 2300 IFTR=11THENP5=2 2303 RETURN 2305 REM * FLUSH SCORING * 2310 K=1:FORX=1TO5:H$(X)=STR$(X):NEXTX 2315 FORX=1TO5 2320 IFS$(X)=TS$THEN2330 2325 H$(K)=S$(X):K=K+1 2330 NEXTX 2335 Z=1:IFK=1THENP6=5 2340 FORK=1TO3 2345 IFH$(K)=H$(K+1)THENZ=Z+1 2350 NEXTK 2355 IFZ=4THENP6=4:GOTO2365 2360 GOTO2370 2365 IFH$(K)=TS$THENP6=5 2370 TP=P1+P2+P3+P4+P5+P6 2375 GT=GT+TP:HA=HA+TP:HL=HL+TP 2380 RETURN 2400 REM * CRIB FLUSH SCORING * 2405 Z=1 2410 FORX=1TO4 2415 IFS$(X)=S$(X+1)THENZ=Z+1 2420 NEXTX 2425 IFZ=5THENP6=5 2430 TP=P1+P2+P3+P4+P5+P6 2435 IFW<7THENGT=GT+TP:CA=CA+TP:CL=CL+TP 2440 RETURN 2600 PRINT"[147]OBJECT OF THE GAME IS TO SCORE AS MANY" 2602 PRINT"POINTS AS POSSIBLE USING THE ENTIRE DECK"; 2604 PRINT"OF CARDS. MULTIPLE GAMES CAN BE PLAYED" 2606 PRINT"IN WHICH THE COMPUTER MAINTAINS THE GAME"; 2608 PRINT"AVERAGES, NO. OF GAMES PLAYED, GAME" 2610 PRINT"HIGH, ETC." 2620 PRINT"POINTS ARE SCORED IN THE FOLLOWING WAYS:"; 2622 PRINT" * EACH 15 COMBINATION  2 PTS. [146]" 2624 PRINT" * EACH PAIR  2 PTS. [146]" 2626 PRINT" * EACH RUN (3 OR MORE)  1 PT./CARD [146]" 2628 PRINT" * JACK AS TURN-UP CARD  2 PTS. [146]" 2630 PRINT" * TURN-UP SUIT MATCHES  [146]" 2632 PRINT" JACK IN HAND  1 PT. [146]" 2634 PRINT" * FLUSH OF 4 OR 5  1 PT./CARD [146]" 2640 PRINT"SPECIAL NOTES:" 2642 PRINT" [218] FACE CARDS HOLD A VALUE OF 10 WHEN" 2644 PRINT" SCORING 15 COMBINATIONS" 2646 PRINT" [218] RANK (LOW TO HIGH) IS A,2,3...10,J," 2648 PRINT" Q,K IN RUNS OF 3 OR MORE." 2650 PRINT" [218] FLUSH IN HAND MAY BE 4 OR 5 CARDS," 2652 PRINT" BUT CRIB MUST BE 5 TO BE SCORED." 2654 PRINT" HIT [146] FOR NEXT PAGE"; 2656 GETA$:IFA$=""THEN2656 2658 IFA$<>CHR$(13)THEN2656 2660 PRINT"[147]THE POINTS ARE CALCULATED AUTOMATICALLY" 2662 PRINT"FOR YOU IN THIS GAME. THEREFORE," 2664 PRINT"EXPERIENCE WILL TEACH YOU TO UNDERSTAND" 2666 PRINT"HOW THE POINTS ARE COUNTED." 2670 PRINT"YOU MUST SELECT 2 CARDS FOR A SECOND" 2672 PRINT"HAND CALLED A CRIB (HENCE THE NAME" 2674 PRINT"CRIBBAGE). YOU WILL BE ABLE TO SCORE" 2676 PRINT"THESE CARDS LATER JUST AS YOU DO IN A" 2678 PRINT"HAND. TO SELECT, USE THE REFERENCE NO." 2680 PRINT"THAT PERTAINS TO THE DESIRED CARD. AFTER"; 2682 PRINT"SELECTION IS MADE, A TURN-UP CARD IS" 2684 PRINT"DEALT. IT IS TO BE USED IN SCORING BOTH" 2686 PRINT"THE HAND AND CRIB." 2690 PRINT"SIX ROUNDS INCLUDING LAST 4 CARDS ARE" 2692 PRINT"PLAYED TO COMPLETE ONE GAME. A TOTAL OF" 2694 PRINT"121 PT. IS A WINNING SCORE." 2696 PRINT"[218] HINT: THE 2ND ROUND TURN-UP CARD" 2698 PRINT"APPEARS AGAIN IN THE 6TH ROUND." 2700 PRINT" HIT [146] TO PLAY GAME"; 2705 GETA$:IFA$=""THEN2705 2708 IFA$<>CHR$(13)THEN2705 2710 RETURN 2800 OPEN4,4:CMD4:FORI=1TO20:FORJ=1TO33 2810 PK=PEEK(1023+I*40+J):IFPK<32THENPK=PK+64:GOTO2830 2820 IFPK>63THENPK=PK+32 2830 PRINT#4,CHR$(14)CHR$(PK);:NEXTJ:PRINT#4:NEXTI 2840 PRINT#4,CHR$(15);CHR$(12);: CLOSE4: RETURN 63000 REM PLAY AGAIN? 63010 PRINT"[147]DO YOU WANT TO PLAY AGAIN?" 63020 POKE198,0:WAIT198,1:GETA$:IFA$<>"Y"ANDA$<>"N"THEN63020 63030 IFA$="Y"THEN 178 63040 PRINT"[147]LOAD"CHR$(34)"PAYLOAD"CHR$(34)",8":PRINT"RUN" 63050 POKE631,13:POKE632,13:POKE198,2: END